var altura_pulo = 6 * 16;
var gravidade = 8;

function criarPlayer(imagem, tile_x, tile_y){

	var p = new Sprite(32, 32);
	p.image = game.assets[imagem];
	//localizaca do player
	p.x = 0;
	p.y = 0;

	//auxiliar movimento lateral
	p.vx = 0;
	p.vy = 0;
	p.velocidade = 4;

	//auxiliar pulo
	p.jx = 0;
	p.jy = 0;
	p.altura = 0;
	//auxiliar para calcular o sprite do frame
	p.pose = 0;

	//status do player
	p.pulando = false;
	p.caindo = false;
	p.movendo = false;

	//localizaca do player
	p.x = tile_x * 16;
	p.y = tile_y * 16;
	return p;

}

/** 
	calcula se pode mover, entao dispara o evento para mover
	direction 1 = right
	direction 2 = left
*/
function mover(objeto, direction){
	if(!objeto.movendo){// se nao estiver andado, entao ler as teclas de direcao
		objeto.vx = 0;

		var dist = 32;

		if (direction == 2) { //esquerda
			objeto.vx = objeto.velocidade * -1; //velocidade voltando, por isso negativo
			objeto.scaleX = -1; //imagem inversa
			dist = 0;
		}else
		if (direction == 1){ //direita
			objeto.vx = objeto.velocidade;
			objeto.scaleX = 1;
		}

		var x = Math.floor(objeto.x / 16) * 16 + dist;
		var y = Math.floor((objeto.y + objeto.jy) / 16) * 16 + 16;

		if (0 <= x && x < map.width && 0 <= y && y < map.height && !map.hitTest(x, y)) {
			objeto.movendo = true;
		}

	}
}

/**
	calcula se pode pular, entao dispara o evento para pular
*/
function pular(objeto){

	if (!objeto.pulando && !objeto.caindo) {
		objeto.jy = gravidade * -1;
		game.assets['jump.wav'].clone().play();

		objeto.altura = objeto.y - altura_pulo;
		objeto.pulando = true;
		objeto.caindo = false;
	}

}

/**
	calculo para mover, pular e atualizar o sprite do player
*/
function atualizarFrame(objeto){

	//mover o objeto para cima
	if (objeto.pulando) {
		objeto.moveBy(objeto.jx, objeto.jy);
		if (objeto.y <= objeto.altura) {
			objeto.pulando = false;
			objeto.caindo = true;
		}
	}else{
		objeto.jy = gravidade;

		var x = Math.floor((objeto.x + objeto.vx) / 16) * 16 + 16;
		var y = objeto.y  + 32;

		if (0 <= x && x < map.width && 0 <= y && y < map.height && !map.hitTest(x, y)) {
			objeto.caindo = true;
			objeto.moveBy(objeto.jx, objeto.jy);
		}else{
			objeto.caindo = false;
		}
	}

	//mover o objeto para os lados
	if(objeto.movendo){
		objeto.moveBy(objeto.vx, objeto.vy);
		if (objeto.vx && ((objeto.x-8) % 16 == 0)) {
			objeto.movendo = false;
		}
	}

	if(objeto.pulando || objeto.caindo){
		objeto.frame = 1;
	}else if(objeto.movendo){
		if (game.frame % 3 == 0) {
			objeto.pose++;
			objeto.pose %= 2;
		}
		objeto.frame = objeto.pose + 1;
	}else{
		objeto.frame = 0;
	}

}